task
小C站在路边等车,无聊之余他玩起了合并方块游戏。
这n个方块排成一排,每个方块有一个颜色,我们会用一个字符串表示。
我们会知道两种颜色可以合并,以及它们合并后的颜色。
现在我们要把这n个方块合并成一个方块,但是问题来了,小C是在烈阳下玩的游戏,屏幕的严重反光让他可能看不清每个方块的颜色,所以他只能用上他强大的第六感来预测。
小C猜了每个方块可能是什么颜色,为颜色k的可能性用浮点数来表示。
他想知道最后最有可能得到的颜色是什么。
solution
我们很容易发现此题就是石子合并问题,所以我们同样的用动态规划来写。
但是这题与经典的石子合并不同,多了颜色这一条件,所以我们的dp状态理所应当的需要在多一维。
dp[i][j][k]表示将j~k中的方块合并之后得到颜色i的概率是多少。
那么显然转移方程为:
其中颜色a与颜色b混合之后得到c,而j∈[l,r)。
这样转移的复杂度就是石子合并的在加上枚举所有的关系R,最终复杂度为
需要注意的是为了防止精度丢失或溢出等问题,我们可以将概率取对数,然后可以把相乘的操作改成相加。
Code
1 |
|